/*
 * @Date: 2022-02-11 16:43:42
 * @LastEditors: tich425
 * @LastEditTime: 2022-02-12 12:36:05
 * @FilePath: \TodoList\utils\utils.go
 * @Description: 工具包
 */
package utils

import (
	"math/rand"
	"reflect"
	"time"
)

/**
 * @description: 随机数字
 * @param {int} length
 */
func RandomNumber(length int) string {
	rand.Seed(time.Now().UnixNano())
	letters := "0123456789"
	b := make([]byte, length)
	for i := range b {
		b[i] = letters[rand.Intn(len(letters))]
	}
	return string(b)
}

/**
* @description: 结构体反射赋值
 */
func StructAssign(binding interface{}, value interface{}) {
	bVal := reflect.ValueOf(binding).Elem() // 获取reflect.Type类型
	vVal := reflect.ValueOf(value).Elem()   // 获取reflect.Type类型
	vTypeOfT := vVal.Type()
	for i := 0; i < vVal.NumField(); i++ {
		// 在要修改的结构体中查询有数据结构体中相同属性的字段，有则修改其值
		name := vTypeOfT.Field(i).Name
		if ok := bVal.FieldByName(name).IsValid(); ok {
			bVal.FieldByName(name).Set(reflect.ValueOf(vVal.Field(i).Interface()))
		}
	}
}
